
#include "app_config.h"
#include "config.h"
#include "debug.h"

#include "STC32G_Timer.h"
#include "STC32G_GPIO.h"
#include "STC32G_NVIC.h"
#include "STC32G_Exti.h"
#include "STC32G_Delay.h"
#include "STC32G_Switch.h"
#include "STC32G_Compare.h"
#include "STC32G_ADC.h"
#include "math.h"

#if TCFG_DRV_COMPARE_SUPPORT
static uint8_t cmp_flag=0;
static uint8_t cmp_value=0;

void drv_compare_init(void)
{
    CMP_InitDefine cmp;
    cmp.CMP_EN = ENABLE;            //允许比较器		ENABLE,DISABLE
    cmp.CMP_P_Select = CMP_P_P37;   //比较器输入正极选择, CMP_P_P37/CMP_P_P50/CMP_P_P51, CMP_P_ADC: 由ADC模拟输入端做正输入.
    cmp.CMP_N_Select = CMP_N_GAP;   //比较器输入负极选择, CMP_N_GAP: 选择内部BandGap经过OP后的电压1.19V做负输入, CMP_N_P36: 选择P3.6做负输入.
    cmp.CMP_InvCMPO = DISABLE;      //比较器输出取反, ENABLE,DISABLE
    cmp.CMP_100nsFilter = ENABLE;   //内部0.1us滤波,  ENABLE,DISABLE
    cmp.CMP_Outpt_En = ENABLE;      //允许比较结果输出,ENABLE,DISABLE
    cmp.CMP_OutDelayDuty = 32;      //0~63, 比较结果变化延时周期数
    CMP_Inilize(&cmp);

    NVIC_CMP_Init(RISING_EDGE|FALLING_EDGE,Priority_0);	//中断使能, RISING_EDGE/FALLING_EDGE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3

    // P3.6 P3.7 高阻输入模式
    P3_MODE_IN_HIZ(GPIO_Pin_6|GPIO_Pin_7);
    P3_MODE_IO_PU(GPIO_Pin_6|GPIO_Pin_7);
    
    // P4_MODE_IO_PU(GPIO_Pin_7);  // 准双向口
    // P4_MODE_OUT_PP(GPIO_Pin_7); // 推挽输出
    // COMP_SW(CMP_OUT_P34);

    P4_MODE_IO_PU(GPIO_Pin_1);  // 准双向口
    P4_MODE_OUT_PP(GPIO_Pin_1); // 推挽输出
    COMP_SW(CMP_OUT_P41);
    // CMPO_P41();

} 

void drv_compare_task(void)
{
    if (cmp_flag) {
        cmp_flag = 0;
        log_d("cmp_value:%d\n", cmp_value);
    }
}

void CMP_ISR_Handler (void) interrupt CMP_VECTOR
{
	CMPIF = 0;			//清除中断标志
	cmp_flag = 1;
    cmp_value = CMPRES;	//中断方式读取比较器比较结果
	// TODO: 在此处添加用户代码
	// P47 = CMPRES;	//中断方式读取比较器比较结果
}

#endif //TCFG_DRV_COMPARE_SUPPORT
